/**
 * router,js 路由模块
 * 职责
 * 处理路由
 * 根据不同的请求方法——请求路径设置具体的处理函数
 * 模块职责要单一
 * 增强代码的可维护性，效率开发
 */
var fs = require('fs')
// var Student = require('./Student')

var Student = require('./students_mongodb')

// Express 提供了一种更好的方式
// 专门用来包装路由的
var express = require('express')

// 创建一个路由容器
var router = express.Router()

// 把路由都挂载到router 路由容器中
router.get('/', function (req, res) {

    res.send('index page')
})

router.get('/students', function (req, res) {
    // 除了这样来转换之外，也可以通过 data.toString()的方式
    //  fs.readFile('./db.json','utf8',function (err,data) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }
    //     var students =JSON.parse(data).students
    //     console.log(typeof data)
    //     res.render('testdb.html',{
    //         students:students
    //     })
    // })

    // Student.findAll(function (err, data) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }

    //     res.render('testdb.html', {
    //         students: data
    //     })
    // })


    // mongodb 操作
    Student.find(function (err, data) {
        if (err) {
            return res.status(500).send('Server error.')
        }

        res.render('testdb.html', {
            students: data
        })
    })
})

router.get('/students/new', function (req, res) {

    res.render('add.html')
})

router.post('/students/new', function (req, res) {
    // 1、处理post表单
    // 2、处理
    //      将数据保存到 db.json 文件中用以持久化
    // 3、发送响应
    // 先读取出来，转成对象
    // 然后往对象中 push 数据
    // 然后把对象转为字符串
    // 然后把字符串再次写入文件

    // Student.save(req.body, function (err) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }

    //     res.redirect('/students')
    // })


    // mongodb
    new Student(req.body).save(function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }

        res.redirect('/students')
    })

})

/**
 * 渲染编辑学生页面
 */
router.get('/students/edit', function (req, res) {
    // 1、在客户端的列表页中处理链接问题（需要有 ID 参数）
    // 2、获取要编辑的学生 ID
    // 
    // 3、渲染编辑页面
    //      根据ID把学生信息查出来
    //      使用模板引擎渲染页面
    // Student.findByID(parseInt(req.query.id), function (err, student) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }

    //     // console.log(student)

    //     res.render('update.html', {
    //         student: student
    //     })
    // })


    // MongoDB操作
    Student.findById(req.query.id, function (err, student) {
        if (err) {
            return res.status(500).send('Server error.')
        }

        // console.log(student)

        res.render('update.html', {
            student: student
        })
    })
})

/**
 * 处理编辑学生
 */
router.post('/students/edit', function (req, res) {

    // 1、获取表单数据
    // 通过bodyparser中间件获取post请求体数据
    // 2、更新
    // Student.updateByID()
    // 3、发送响应

    console.log(req.body)
    // Student.updateById(req.body, function (err) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }

    //     res.redirect('/students')
    // })

    // mongodb操作
    Student.findByIdAndUpdate(req.body.id,req.body, function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }

        res.redirect('/students')
    })
})

router.get('/students/delete', function (req, res) {

    // 1、获取要删除的 id
    // 2、根据 id 执行删除操作
    // 3、根据操作结果发送响应数据
    console.log(req.query.id)
    // Student.deleteById(req.query.id, function (err) {
    //     if (err) {
    //         return res.status(500).send('Server error.')
    //     }
    //     res.redirect('/students')
    // })

    // mongodb 操作
    Student.findByIdAndRemove(req.query.id, function (err) {
        if (err) {
            return res.status(500).send('Server error.')
        }
        res.redirect('/students')
    })
})


// 把router。js 导出
module.exports = router